#pragma once

class CGLFont;

struct BTreeNode
{
    BTreeNode* pLeft;
    BTreeNode* pRight;
	BTreeNode* pParent;
    int value;
	int hight;
	GLfloat xPos;
	GLfloat yPos;
    
    BTreeNode(void)
    : pLeft(NULL)
    , pRight(NULL)
	, pParent(NULL)
    , value(0)
	, hight(0)
	, xPos(0)
	, yPos(0)
    {
    }
};


void DrawNode(CGLFont& font, BTreeNode* pNode);

GLfloat GetXPos(const BTreeNode* pNode);

GLfloat GetYPos(const BTreeNode* pNode);

int GetHight(const BTreeNode* pNode);

class BTree
{
public:
    BTree(void);
    ~BTree(void);
	BTreeNode* FindNode(int value);
	void InsertNode(int value);
	void DeleteNode(int value);
	void PrintOut(CGLFont& font);
public:
    BTreeNode* root;
private:
    void FreeNode(BTreeNode* pNode);
};